{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入一些包\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from sklearn.datasets import make_blobs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.collections.PathCollection at 0x176938e2bb0>"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 模拟出一些数据集出来\n",
    "\n",
    "#r = np.random.randint(1,100)\n",
    "r = 4\n",
    "#print(r)\n",
    "k = 3\n",
    "x , y = make_blobs(n_samples = 50, # 这里表示生成的数据集总数\n",
    "                   cluster_std = [0.3, 0.3, 0.3], # 表示数据的离散度\n",
    "                   centers = [[0,0],[1,1],[-1,1]] # 坐标中心\n",
    "                   ,random_state = r # 随机种子，这样可以确保生成的数据是一致的\n",
    "                  )\n",
    "sim_data = pd.DataFrame(x, columns = ['x1', 'x2'])\n",
    "sim_data['label'] = y\n",
    "sim_data.head(5)\n",
    "\n",
    "datasets = sim_data.copy()\n",
    "\n",
    "# 设置测试点\n",
    "\n",
    "p = [0.5, 0.5]\n",
    "\n",
    "plt.scatter(sim_data['x1'], sim_data['x2'], c = y)\n",
    "plt.scatter(0.5, 0.5, c = 'red', marker = 'x')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算每一个点到测试点距离\n",
    "X=datasets.iloc[:,:-1]\n",
    "Y=datasets.iloc[:,-1]\n",
    "# for i in X.index:\n",
    "#    d_sq.append(np.power(X.iloc[i,:]-p,2).sum())\n",
    "# d_sq\n",
    "d=np.power(X-p,2).sum(axis=1) #axis=0 是列相加"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把计算出来的距离与标签拼接起来\n",
    "df_dist= pd.DataFrame({'dist':d,'label':Y})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 确认前k个点\n",
    "k=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "0"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 开始投票\n",
    "df_dist.sort_values(by='dist').iloc[:k,-1].mode().values[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 封装成一个函数\n",
    "\n",
    "def knn_classify(p,datasets,k):\n",
    "    X=datasets.iloc[:,:-1]\n",
    "    Y=datasets.iloc[:,-1]\n",
    "    d=np.power(X-p,2).sum(axis=1) #axis=0 是列相加\n",
    "    df_dist= pd.DataFrame({'dist':d,'label':Y})\n",
    "    predict=df_dist.sort_values(by='dist').iloc[:k,-1].mode().values[0]\n",
    "    return  predict\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "1"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 测试\n",
    "\n",
    "predict= knn_classify([1,1],datasets,5);\n",
    "predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "    电影名称  打斗镜头  接吻镜头 电影类型\n0   无问西东     1   101  爱情片\n1  后来的我们     5    89  爱情片\n2    前任3    12    97  爱情片\n3   红海行动   108     5  动作片\n4  唐人街探案   112     9  动作片\n5    战狼2   115     8  动作片",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>电影名称</th>\n      <th>打斗镜头</th>\n      <th>接吻镜头</th>\n      <th>电影类型</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>无问西东</td>\n      <td>1</td>\n      <td>101</td>\n      <td>爱情片</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>后来的我们</td>\n      <td>5</td>\n      <td>89</td>\n      <td>爱情片</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>前任3</td>\n      <td>12</td>\n      <td>97</td>\n      <td>爱情片</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>红海行动</td>\n      <td>108</td>\n      <td>5</td>\n      <td>动作片</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>唐人街探案</td>\n      <td>112</td>\n      <td>9</td>\n      <td>动作片</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>战狼2</td>\n      <td>115</td>\n      <td>8</td>\n      <td>动作片</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 尝试其它的数据集\n",
    "\n",
    "rowdata={'电影名称':['无问西东','后来的我们','前任3','红海行动','唐人街探案','战狼2'],\n",
    "         '打斗镜头':[1,5,12,108,112,115],\n",
    "         '接吻镜头':[101,89,97,5,9,8],\n",
    "         '电影类型':['爱情片','爱情片','爱情片','动作片','动作片','动作片']} \n",
    "\n",
    "movie_data=pd.DataFrame(rowdata)\n",
    "movie_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "'爱情片'"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datasets = movie_data.iloc[:, 1:]\n",
    "knn_classify([24,67], datasets, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([0])"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# sklearn 实现\n",
    "\n",
    "X , y = make_blobs(n_samples = 50,\n",
    "                   cluster_std = [0.3, 0.3, 0.3],\n",
    "                   centers = [[0,0],[1,1],[-1,1]]\n",
    "                   ,random_state = r\n",
    "                  )\n",
    "p=[[0,0]]\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "clf=KNeighborsClassifier(n_neighbors=4) #实例化\n",
    "clf.fit(X,y) #训练数据\n",
    "clf.predict(p) #预测数据\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "'0.24.2'"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sklearn\n",
    "sklearn.__version__\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "['__abstractmethods__',\n '__class__',\n '__delattr__',\n '__dict__',\n '__dir__',\n '__doc__',\n '__eq__',\n '__format__',\n '__ge__',\n '__getattribute__',\n '__getstate__',\n '__gt__',\n '__hash__',\n '__init__',\n '__init_subclass__',\n '__le__',\n '__lt__',\n '__module__',\n '__ne__',\n '__new__',\n '__reduce__',\n '__reduce_ex__',\n '__repr__',\n '__setattr__',\n '__setstate__',\n '__sizeof__',\n '__str__',\n '__subclasshook__',\n '__weakref__',\n '_abc_impl',\n '_check_algorithm_metric',\n '_check_n_features',\n '_estimator_type',\n '_fit',\n '_fit_X',\n '_fit_method',\n '_get_param_names',\n '_get_tags',\n '_kneighbors_reduce_func',\n '_more_tags',\n '_pairwise',\n '_repr_html_',\n '_repr_html_inner',\n '_repr_mimebundle_',\n '_tree',\n '_validate_data',\n '_y',\n 'algorithm',\n 'classes_',\n 'effective_metric_',\n 'effective_metric_params_',\n 'fit',\n 'get_params',\n 'kneighbors',\n 'kneighbors_graph',\n 'leaf_size',\n 'metric',\n 'metric_params',\n 'n_features_in_',\n 'n_jobs',\n 'n_neighbors',\n 'n_samples_fit_',\n 'outputs_2d_',\n 'p',\n 'predict',\n 'predict_proba',\n 'radius',\n 'score',\n 'set_params',\n 'weights']"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir(clf)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[1., 0., 0.]])"
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.predict_proba(p) #属于各个类别的概率"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "['__all__',\n '__builtins__',\n '__cached__',\n '__doc__',\n '__file__',\n '__loader__',\n '__name__',\n '__package__',\n '__path__',\n '__spec__',\n '_base',\n '_california_housing',\n '_covtype',\n '_kddcup99',\n '_lfw',\n '_olivetti_faces',\n '_openml',\n '_rcv1',\n '_samples_generator',\n '_species_distributions',\n '_svmlight_format_fast',\n '_svmlight_format_io',\n '_twenty_newsgroups',\n 'clear_data_home',\n 'dump_svmlight_file',\n 'fetch_20newsgroups',\n 'fetch_20newsgroups_vectorized',\n 'fetch_california_housing',\n 'fetch_covtype',\n 'fetch_kddcup99',\n 'fetch_lfw_pairs',\n 'fetch_lfw_people',\n 'fetch_olivetti_faces',\n 'fetch_openml',\n 'fetch_rcv1',\n 'fetch_species_distributions',\n 'get_data_home',\n 'load_boston',\n 'load_breast_cancer',\n 'load_diabetes',\n 'load_digits',\n 'load_files',\n 'load_iris',\n 'load_linnerud',\n 'load_sample_image',\n 'load_sample_images',\n 'load_svmlight_file',\n 'load_svmlight_files',\n 'load_wine',\n 'make_biclusters',\n 'make_blobs',\n 'make_checkerboard',\n 'make_circles',\n 'make_classification',\n 'make_friedman1',\n 'make_friedman2',\n 'make_friedman3',\n 'make_gaussian_quantiles',\n 'make_hastie_10_2',\n 'make_low_rank_matrix',\n 'make_moons',\n 'make_multilabel_classification',\n 'make_regression',\n 'make_s_curve',\n 'make_sparse_coded_signal',\n 'make_sparse_spd_matrix',\n 'make_sparse_uncorrelated',\n 'make_spd_matrix',\n 'make_swiss_roll']"
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sklearn.datasets as D\n",
    "dir(D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [],
   "source": [
    "# breast_cancer 数据集\n",
    "\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.datasets import load_breast_cancer\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 探索数据集\n",
    "data = load_breast_cancer()\n",
    "x=data['data']\n",
    "y=data['target']"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "KNeighborsClassifier(n_neighbors=4)"
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name = ['平均半径','平均纹理','平均周长','平均面积',\n",
    "        '平均光滑度','平均紧凑度','平均凹度',\n",
    "        '平均凹点','平均对称','平均分形维数',\n",
    "        '半径误差','纹理误差','周长误差','面积误差',\n",
    "        '平滑度误差','紧凑度误差','凹度误差',\n",
    "        '凹点误差','对称误差',\n",
    "        '分形维数误差','最差半径','最差纹理',\n",
    "        '最差的边界','最差的区域','最差的平滑度',\n",
    "        '最差的紧凑性','最差的凹陷','最差的凹点',\n",
    "        '最差的对称性','最差的分形维数']\n",
    "\n",
    "#pd.DataFrame(x,columns=name)\n",
    "\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "clf=KNeighborsClassifier(n_neighbors=4)\n",
    "clf.fit(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "data": {
      "text/plain": "0.9472759226713533"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_data=pd.DataFrame(x,columns=name);\n",
    "total_data['Y']=y\n",
    "total_data['Y_pred']=clf.predict(x)\n",
    "(total_data['Y']==total_data['Y_pred']).sum() / x.shape[0]"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "data": {
      "text/plain": "0.9472759226713533"
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.score(x,y)\n",
    "#自动计算模型评价"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "(0.9447236180904522, 0.9181286549707602)"
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 划分训练集和测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)\n",
    "\n",
    "clf=KNeighborsClassifier(n_neighbors=5)\n",
    "clf.fit(x_train,y_train)\n",
    "clf.score(x_train,y_train),clf.score(x_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 建立模型&评估模型\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 选取最优的K值\n",
    "\n",
    "# 更换不同的n_neighbors参数的取值，观察结果的变化\n",
    "\n",
    "\n",
    "\n",
    "#x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=420)#random_state固定随机数，确保取值相同\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制学习曲线\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "score = []\n",
    "krange = range(1,20)\n",
    "\n",
    "x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)\n",
    "\n",
    "for i in krange:\n",
    "    clf=KNeighborsClassifier(n_neighbors=i)\n",
    "    clf.fit(x_train,y_train)\n",
    "    clf.score(x_train,y_train)\n",
    "    score.append(clf.score(x_test,y_test))\n",
    "\n",
    "plt.plot(krange,score);\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([0.87719298, 0.92105263, 0.94736842, 0.93859649, 0.91150442])"
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 交叉验证\n",
    "\n",
    "x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)\n",
    "\n",
    "score = []\n",
    "krange = range(1,20)\n",
    "\n",
    "from sklearn.model_selection import cross_val_score as CVS\n",
    "\n",
    "clf=KNeighborsClassifier(n_neighbors=3)\n",
    "\n",
    "#此处把数据集分为五折，即分析五次，每次取四份为训练集，一份为测试集，算出评估结果\n",
    "cvresult=CVS(clf,x,y,cv=5);\n",
    "\n",
    "cvresult"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "0.9191429902189101"
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 均值：查看模型的平均效果\n",
    "\n",
    "cvresult.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "0.0005993822421332872"
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 方差：查看模型是否稳定\n",
    "\n",
    "cvresult.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12\n",
      "0.9332401800962584\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制带交叉验证的学习曲线\n",
    "score = []\n",
    "var_ = []\n",
    "krange=range(1,20)\n",
    "\n",
    "for i in krange:\n",
    "    clf = KNeighborsClassifier(n_neighbors=i)\n",
    "    cvresult = CVS(clf,x,y,cv=5)\n",
    "    score.append(cvresult.mean())\n",
    "    var_.append(cvresult.var())\n",
    "    \n",
    "plt.plot(krange,score,color='k')\n",
    "plt.plot(krange,np.array(score)+np.array(var_)*2,c='red',linestyle='--')\n",
    "plt.plot(krange,np.array(score)-np.array(var_)*2,c='red',linestyle='--')\n",
    "\n",
    "bestindex = krange[score.index(max(score))]-1\n",
    "print(bestindex)\n",
    "print(score[bestindex])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 归一化\n",
    "\n",
    "from sklearn.preprocessing import MinMaxScaler \n",
    "\n",
    "data = [[-1,2],[-0.5,6],[0,10],[1,18]]\n",
    "\n",
    "# 如果换成表是什么样子？\n",
    "d=pd.DataFrame(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0.  , 0.  ],\n       [0.25, 0.25],\n       [0.5 , 0.5 ],\n       [1.  , 1.  ]])"
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 实现归一化\n",
    "# 归一化实现算法，(x(i)-x(min))/(x(max)-x(min))\n",
    "\n",
    "d.min(),d.max()\n",
    "\n",
    "ddd=(d-d.min())/(d.max()-d.min())\n",
    "\n",
    "#调包的方法\n",
    "\n",
    "scaler=MinMaxScaler()\n",
    "scaler.fit(d)\n",
    "dddd=scaler.transform(d);\n",
    "\n",
    "dddd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD4CAYAAADlwTGnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4RUlEQVR4nO3deXRc1ZXo/+/WbFmTVZLlWbMEBhsbhLEExGYwgSTNlE4CSXfI1GSim0DoX2BldV4/Xljp/BIgdMJLQgIhdNIhhM5Ap8kPjDEOiWSwwAMYI1kly7bkSSpZszXv3x91yxRCskpSjdL+rKWlW3c4d1dZrn3vOeeeI6qKMcaYuScu0gEYY4yJDEsAxhgzR1kCMMaYOcoSgDHGzFGWAIwxZo5KiHQAU5GTk6MFBQWRDsMYY2LKa6+91qaquWPXx1QCKCgooLa2NtJhGGNMTBGRg+OttyogY4yZoywBGGPMHGUJwBhj5ihLAMYYM0dZAjDGmDnKEoAxxsxRlgCMMWaOiqnnAIyZrRpOdNPS0c+Gsvc8qxNWNW4PKYlxrF2xIKJxRIPhkVEer26i69TQjMqZl5TAZy4pIDkhPkiRBY8lAGOiwH3/s49XDrSz+39dRWJ8ZG7MVZU7n9rFqCrb/vkyUhKj7wsrnP7r9Wa++T/7ABCZXhm+6VaWZ8/jQ6uXBCmy4LEEYEyEDY2M8uqBdvoGR9jT3MEF+dkRiaPJ08fRzn4AfrH9IJ+7tCgicUSDgeER/n1LA2uWZ/G7L1Uh08wAwyOjrLl3MzVuT1QmAGsDMCbC9jR30js4AkB1gydicVS72wAoWZjGj7a56R0YjlgskfbUjsO0dJzizk1l0/7yB0iIj2NdYTY17sj9u56JJQBjIqzG+eJdnj2P6gh+UVS7PSzKSOHbH15NW88gP69pilgskdQ/NML3X2xgXUE2l5bmzLi8qmIXjW29HHPurqKJJQBjIqym0cPZizN4/8pFvHboJP1DI2GPQVXZ7vZQVezigvwFXFaeyyN/bqS7f2YNoLHoF9sPcqJ7gDuvmtnVv09lsQuAmsa2GZcVbJYAjImg/qERaptOUlnkorLYxeDwKK8fOhn2OOqP9+DpHTz9ZXXnpnI6+oZ47C9NYY8lknoHhvnRNjcXl7hYX+QKSplnL8ogKzUxotV7EwkoAYjI1SJSJyINInL3ONvzRWSLiOwRkZdEZJmz/jIR2eX30y8i1zvbHheRA37b1gTzjRkTC3Ye6mBgeJSqYhfrCrOJj5OI1Bf76v99CWDVskyuWpnHT19upKNvMOzxRMrPa5po6xnkzk3lQSszLk5YX+ii2u1Bfd2CosSkCUBE4oGHgWuAlcDNIrJyzG7fBZ5Q1dXAvcC3AFR1q6quUdU1wOVAH/C833H/7Nuuqrtm+maMiTU17jbiBNYVZZOeksiqpZkRaQeodntYkZ3KsgWpp9fdeVUZPYPD/OTlxrDHEwld/UP8eFsjl5XnckF+cJ+DqCpx0dJxisPtp4Ja7kwFcgewDmhQ1UZVHQSeBK4bs89K4EVnees42wH+FviTqvZNN1hjZpuaRg+rlmaSkZIIeBsMdx/uCGsPnJFR5ZVGb/2/v7MWZfDBVYv52V+b8PQMhC2eSHnsLwfoPDUU1Kt/n6oobQcIJAEsBQ77vW521vnbDdzoLN8ApIvI2Aq0m4BfjVl3n1Nt9KCIJI93chG5VURqRaS2tbU1gHCNiQ19g8PsPNRBZfE7PU0qi10Mjyo7mtrDFsdbR7ro6h8+Xf3j7ytXltE/NMKPtrnDFk8kdPQN8ujLB3j/OXmsWpYZ9PKLc9PITU+OaC+v8QSrEfguYIOI7AQ2AC3A6a4MIrIYWAU853fMPcBZwIVANvC18QpW1UdUtUJVK3JzI/uYvDHBtKPpJMOj+q4r74r8bBLjw9sOcLr+f5xGz5KFaVy/dilP1BzkRFf0dWMMlp+83EjP4DB3bCoLSfkiQmVR9LUDBJIAWoDlfq+XOetOU9Ujqnqjqq4Fvu6s6/Db5aPA71R1yO+Yo+o1APwMb1WTMXNGjdtDYrxQUfBOffO8pHjWrlhATWP4EkBNo4eShWkszEgZd/vtV5QyPKo8vLUhbDGFk6dngJ/9tYkPrV7CWYsyQnaeqmIXrd0DuFt7Q3aOqQokAewASkWkUESS8FblPOO/g4jkiIivrHuAx8aUcTNjqn+cuwLE29H2euDNKUdvTAyrcbexZnkWqUnvHpGlssjFmy2ddPaFvg++bxiKsfX//vJd8/loxTJ+9ar36djZ5kfb3PQPjfCVK0tDep7TzwO4o6cdYNIEoKrDwG14q2/2AU+p6l4RuVdErnV22wjUiUg9kAfc5zteRArw3kFsG1P0L0XkDeANIAf45szeijGxo6t/iDdaOt9V/+9TVexiVOGVA6G/C9jT3EHf4Mi41T/+brvc++X4gxdn113Aia5+nqg5yPVrl1KcmxbSc63ITmVpVmSf9h4roMHgVPVZ4Nkx677ht/w08PQExzbx3kZjVPXyqQRqzGzyamM7o8q4V95rVmSRkhhHTaOHq85ZFNI4fG0Nkz30tDRrHjevW84vXznEFzcUs8KVesb9Y8XDWxsYGVVuvyK0V//gtAMUu3hh33FGR5W4uJk/ZTxT9iSwMRFQ7faQnBDH2hVZ79mWnBBPRX54BhCrdntYuTiDBfOTJt33y5eVEB8nPLRlf8jjCoeWjlP86tXDfKRiGfmu+WE5Z1Wxi46+Id4+1h2W803GEoAxEVDtbqOiYMGEk4RUFrt4+1g3bSHsf98/NELtwZPjdv8cz8KMFP5+fT6/29lMw4mekMUVLj940ZvIfNVb4eD7rKujpB3AEoAxYdbeO8jbx7qpGqf+38dXNbQ9hL2BXj90kkFnGIpAfWFjMSmJ8TF/F3DI08dvapu5ed1ylmbNC9t5F2fOozBnftQMD20JwJgw832pn6nefdXSTNKSE0L6RbHd7SE+TlhXGPgENDlpyXyqqoA/7jnC28e6QhZbqD20ZT/xccKXLysJ+7kri128eqCd4ZHRsJ97LEsAxoRZtbuN+UnxrD7DE6fhmEik2u3h3KWZpDvDUATq1vcVkZaUwIOb60MUWWg1nOjhdzub+WRl/oTPPoRSZZGL7oFh3jwS+QRqCcCYMKt2e1hXmD3p3L+hnEikd2CYXYc7plT945OVmsRnLy3kub3HeaO5M+ixhdpDW/aTkhjPFzYUR+T8vju/aGgHsARgTBgd7+qnsbU3oIbXUE4kUnvwvcNQTMVnLikkc14iD2yuC3JkofX2sS7+e/cRPn1xAa60cYcfC7nc9GTK89Kjoh3AEoAxYeT7T3+mBmCfUE4kUu1u8w5DMc0J6DNSEvn8hiK21rXy2sHwT2AzXQ9uric9OYF/iPCE95XFLnY0tTM4HNl2AEsAxoRRtbuNzHmJnL148jFn/CcSCbYat4e1yxcwL2n8bqiBuKWyANf8pJhpC3ijuZPn9h7ns5cWkpU6+XMPoVRZ7KJ/aJRdhzsiGoclAGPCqKbRw0XOzF+BeGcikeBNo9F5aog3WzoD7v8/kfnJCXxxYzF/aWgLaXfVYHlgcx1ZqYl85pLCSIfC+kIXIpFvB7AEYEyYHG7v43D7qSnVu1eGoMHw1QMTD0MxVX+3Pp+8jGQeeL4+qoY5Huu1gyfZWtfKre8rOj35TiRlpiZy7pLMiLcDWAIwJkxO1/+XTF7/71OyMI2ctOBOJFLtbiM5IY414wxDMVUpifF8+bISXm1q5+X9ke/VMpEHNtfhmp/ELZUFkQ7ltMpiFzsPdXBqcGTynUPEEoAxYVLT6CEnLYnShYGPOikiVBUHdyKRGreHCwuyJxyGYqo+dqH3adr7N0fnXcD2Rg9/bfDwxY3FzE8OaPzLsKgsdjE4MhrRRnRLAMaEgapS7W5jfZEL7xQYgQvmRCKengHePtY94/p/f8kJ8fzj5SXsPtzBi2+fCFq5waCqPPB8PXkZyfzd+vxIh/MuFxZkkxAnEZ0n2BKAMWHQ2NbL8a6BgLp/jhXMiUS2N7a/q8xg+fAFy1iRncr9z9czOho9dwEv72/j1aZ2brushJTE4NzxBEtacgKrl2VGdH4ASwDGhIHvP/l0vniDOZFItbvN+8WzNLgTnyfGx/GVK0t562gXz+09FtSyp0tVuX9zPUuz5vHRC5dPfkAEVBXnsKe5k56B4Yic3xKAMWGw3e1hcWYKBdOYSMU3kcj2Rs+Mr65rGr3DUCRMMgzFdFy3ZinFufN5YHM9I1FwF7Bl3wl2H+7gHy8vCVp7R7BVFbsYGVV2HGiPyPmjp0XEmAho6TjFc28e49MXF0y5bj5Qo6NKTaOHjeW50z5HZZGLp19r5u1j3axcMr2Jy491eoehuPnCFdM6fjLxccIdm8q47T93cvuTO8lNj8xQCz5b3z5BviuVD1+wLKJxnMn5+QtISoij2t3GZWctDPv5LQGYOe1//WEvL+w7zpKsFK4+d3FIzlF3vJv23sFp1f/7+E8kMt0E4GtsDHb9v78PnLuYS0oOs62+NWTnCFR8nPBvN66adNC9SEpJjOf8FVkRawcIKAGIyNXAQ0A88FNV/bcx2/OBx4BcoB34O1VtFpHLgAf9dj0LuElVfy8ihcCTgAt4Dfh7VR2c6RsyJlC7D3fwwr7jxAk8uHk/V61cFJJ5WmtmUP/vsyTLO5HI9kYPn5vmODY1bg+Z8xJZGcAwFNMVFyf84nMXhaz82aiqOIcHX6ino28w7ENUTJoaRSQeeBi4BlgJ3CwiK8fs9l3gCVVdDdwLfAtAVbeq6hpVXQNcDvQBzzvHfBt4UFVLgJPAZ2f+dowJ3AOb61mQmsh9N6yi7ng3f3zjaEjOU+32kO9KnfHMU+uLXLzSOP2JRKrdHiqLXFExGbl5R1WxC9V3emiFUyD3RuuABlVtdK7QnwSuG7PPSuBFZ3nrONsB/hb4k6r2ibci9HLgaWfbz4Hrpxi7MdNW29TOtvpWPr+hmI9VLKc8L53vba4P+ixNI6PKKwc8QRl2oap4+hOJHG7vo/nkqZBW/5jpWb0si3mJ8UHp5jtVgSSApcBhv9fNzjp/u4EbneUbgHQRGfuXdhPwK2fZBXSoqq/v03hlAiAit4pIrYjUtrZGvl7RzA73P19PTloyn6zMJ85pvGxs6+X3u44E9Tx7j3TS3T98xukfAzWTiUR8xwQjEZngSkqI48LC7Ii0AwSrdeQuYIOI7AQ2AC3A6QEuRGQxsAp4bqoFq+ojqlqhqhW5ublBCtfMZdUNbdQ0evjSxmJSk7zNYO8/J49zl2bw0JZ6hoJ4FzCT/v9jzWQikRq3h5y0ZEqmMAyFCZ+qYhf7T/TQ2j0Q1vMGkgBaAP+nKJY5605T1SOqeqOqrgW+7qzr8Nvlo8DvVHXIee0BskTE1wj9njKNCQXfw0GLMlL4+EXvdIcUEb66qZzD7af4TW1z0M5X7fZQujCNhenBmXt2OhOJeIeh8FBZPPVhKEx4+EZ9rQnzsNqBJIAdQKmIFIpIEt6qnGf8dxCRHBHxlXUP3h5B/m7mneof1Dti1Fa87QIAtwB/mHr4xkzNtnrvDFa3Xf7eoQE2lueydkUWP3hxPwPDMx+hcXB4lNqm9qDWu09nIhF3ay8nuges+ieKnbMkg/SUhLC3A0yaAJx6+tvwVt/sA55S1b0icq+IXOvsthGoE5F6IA+4z3e8iBTgvYPYNqborwF3ikgD3jaBR2f2Vow5M1Xlgc31LFswj49WvHdoAN9dwJHOfp589fA4JUzNnuYO+gZHgvrF65tIZCrVQL6rSksA0SshPo6LQjT725kE1Aagqs+qapmqFqvqfc66b6jqM87y06pa6uzzOVUd8Du2SVWXquromDIbVXWdqpao6kf8jzEmFDa/dZw9zZ380xWlJCWM/6d/cYmLiwqz+cHWhhmP017t9iACFxUG74s3MzWRc5ZkTKkhuMbdxpLMFFZkT30YChM+VcUuDnr6aOk4FbZzRu8jcsYE0eio9+q/MGc+N64dt8MZ4NwFXFVOa/cAv9h+cEbnrHa3cfaiDBbMD+7DPVXFOew81EH/0OQJanRUqXF7qCzOsfr/KPfOqK/huwuwBGDmhGffPMrbx7r5ypWlkw6Etq4wm0tLc/jhNve0R2nsHxrh9UMdIal2mcpEInXHuznZN2TVPzGgPC+d7PlJYZ0n2BKAmfVGRpUHN9dTujCND61eEtAxX72qnPbeQX5e3TStc75+8CSDw6NUlQT/i/fCAu+k8oF8UQSzG6oJrbg4obLIxfYgzv426TnDchZjIugPu1pwt/Zyx6Yy4gMcBmHN8iyuOGshP97mpvPU0OQHjFHt9hAfJ1xYkD3lYyeTlpzAeQFOJFLjbqPAlcqSGQ5DYcJjfbGLI539HPT0heV8lgDMrDY0MspDW/azcnEGV5+zaErH3rGpjK7+YR79y4Epn7em0cOqpZmkpyRO+dhABDKRyPDIKK80tlM5g1FITXhVnR71NTztAJYAzKz2X681c9DTx52byqY8CNq5SzO55txFPPaXA5zsDXyg2p6BYXYfDk39v08gE4nsPdJF98Cw1f/HkKKc+eRlJIftgTBLAGbWGhge4fsvNnDe8iyuOHt6k23csamM3sFhHnm5MeBjdjS1MzyqMxr/fzLn5y8gKT7ujO0AvqvIYIxDZMJDxNsOUONuC0s7gCUAM2s9teMwLR2n+Oqmsml3gSzLS+fa85bw+F+bAh6nZbvbQ2K8cEH+gmmdMxApifGcn3/miUSq3W2U5aVFfGYuMzVVxTm09Qyy/0RPyM9lCcDMSv1D3qv/CwsWcGnpzK7Eb7+ilIHhEX60zR3Q/tVuD2tXLGBeUmjnoa0qzuGto1109L23eso7DMXJkN6FmNA4PftbQ+i7g1oCMLPSL7Yf5ET3AF+9qnzGD0AV5abx4fOX8YvtBznW2X/GfTv7hnjzSGdY6t0rzzCRyO7mDk4NjVj1Twxanp3K8ux5YWkHsARgZp3egWF++JKbi0tcQfsC/KcrShkZVR7e2nDG/bYf8KD6zuiOoXTeGSYSqW7wDkOxvij43VBN6FUWudje2M7IaGjbASwBmFnn5zVNeHoHuXNTedDKXJ6dyscuXM6TOw7RfHLiPto1bg8piXGsWZEVtHNPxDeRyHhXijWNbZyzJCPsc8ya4KgqzqHz1BD7jk599repsARgZpWu/iF+vK2Ry8pzg94Ie9vlJYgI398y8V1AjdvDhQXZJCeEtv7fp7LIRf3xd08k0j80wusHO8JyF2JCI1zjAlkCMLPKY385QOepoaBe/fsszpzHx9et4OnXm2lq633P9raeAeqOd4e13t3X1uB/F/DawZMMjoxaA3AMy8tIoSh3fsjHBbIEYGaNjr5BHn35AO8/J49VyzJDco4vXVZMYrzw71v2v2fb9giMuz/eRCLV7jbvMBSFVv8fy6qKXbx6oD2oU5SOZQnAzBqP/LmRnsFh7thUFrJzLExP4ZbKAn63q4WGE93v2lbt9pCWnMCqpaFJPuPxTSTiX1VQ4/Zw3rJM0pITznCkiXZVxTn0Do7wRktnyM5hCcDMCp6eAR6vbuKDqxZz1qKMkJ7r8xuKSU2M58EX3n0XUOP2sK4we9LhpoOtsthFkzORSM/AMLubO230z1nAV5UYynYASwBmVvjRNjf9QyN85crQXf37ZM9P4jOXFPI/e46e7qVxtPMUB9p6IzLuTpVfg+GOA96ug1b/H/uy5ydx1qL0kLYDWAIwMe94Vz9P1Bzk+rVLKVmYFpZzfu6SItJTEnhgcz3wzlVaJK68fROJ1Lg91DR6SIqPC+kwFCZ8qopzqG06ycDwzKYnnUhACUBErhaROhFpEJG7x9meLyJbRGSPiLwkIsv8tq0QkedFZJ+IvOVMEo+IPC4iB0Rkl/OzJlhvyswt/3drAyOjyu1XlIbtnJmpidx6aZEzz3AH1W4PWamJnB3i6qfxxMUJ64uyqXG38deGNtauyCIlMTzdUE1oVRW7GBgeZeehjpCUP2kCEJF44GHgGmAlcLOIrByz23eBJ1R1NXAv8C2/bU8A31HVs4F1wAm/bf+sqmucn13TfxtmrmrpOMWvXj3MRyqWke+aH9Zzf/qSQhakJnL/8/XUuD2sL3RNecjpYKkszuFIZz97j3RZ9c8ssq4omzgJ3fwAgdwBrAMaVLVRVQeBJ4HrxuyzEnjRWd7q2+4kigRV3Qygqj2qGp6pbsyc8IMXvQ2xt10evqt/n7TkBD6/oZht9a20dJwKyfSPgfJve4hkHCa4MlISWbU0c9zhPoIhkASwFDjs97rZWedvN3Cjs3wDkC4iLqAM6BCR34rIThH5jnNH4XOfU230oIjYmLVmSg55+vhNbTM3r1vO0ghNefjJynxy0rx/upF88rYoZz4L05OZlxjPecuyIhaHCb7K4hx2He6gb3Di2d+mK1iNwHcBG0RkJ7ABaAFGgATgUmf7hUAR8CnnmHuAs5z12cDXxitYRG4VkVoRqW1tbQ1SuGY2+N6WeuLjhC9dVhKxGFKTEviXD53NFWctDFsD9HhEhFuqCvhkZT5JCda3YzapLHaRm5bM4fZTQS9bJpt1RkQqgX9V1fc7r+8BUNVvTbB/GvC2qi4TkfXAt1V1g7Pt74H1qvrlMcdsBO5S1Q+dKZaKigqtra0N5H2ZWa7hRA9XPbiNz15SyNc/OLZJypjZY3RUEWFGw5qLyGuqWjF2fSCXCjuAUhEpFJEk4CbgmTGF54iIr6x7gMf8js0SkVzn9eXAW84xi53fAlwPvDmld2TmtIe27CclMZ4vbCiOdCjGhFRcnMx4TosJy55sB1UdBm4DngP2AU+p6l4RuVdErnV22wjUiUg9kAfc5xw7grf6Z4uIvAEI8BPnmF86694AcoBvBu1dmVnt7WNd/PfuI3yqqgBXmjUdGTNdk1YBRROrAjIAn/+PWqobPLz8tctsvHtjAjCTKiBjosYbzZ08t/c4n7200L78jZkhSwAmpjywuY6s1EQ+c0lhpEMxJuZZAjAx47WDJ9la18qt7ysiIyUx0uEYE/MsAZiY8cDmOlzzk7ilsiDSoRgzK1gCMDGhxu3hrw0evrixmPk20YkxQWEJwEQ9VeWBzXXkZSTzd+vzIx2OMbOGJQAT9V7e38aOppPcdlmJDXNsTBBZAjBRTVW5f3M9S7Pm8dELl0c6HGNmFUsAJqpt2XeC3Yc7+MfLS0hOsKt/Y4LJEoCJWqOjygOb68l3pfLhC5ZNfoAxZkosAZio9f/tPcZbR7u4/YpSEuPtT9WYYLP/VSYqjYwqD26upzh3PtetGTv/kDEmGCwBmKj0xz1H2H+ihzs2lREfoXl2jZntLAGYqDM8Msr3XtjPWYvS+cC5iyMdjjGzliUAE3V+u7OFA2293LmpjDi7+jcmZCwBmKgyODzKQy/sZ/WyTDatzIt0OMbMapYATFR5qvYwLR2nuHNTWcimwTPGeFkCMFGjf2iEH7zYwAX5C9hQljv5AcaYGbEEYKLGf75yiGNd/XzVrv6NCQtLACYq9A0O839fclNZ5KKqJCfS4RgzJwSUAETkahGpE5EGEbl7nO35IrJFRPaIyEsissxv2woReV5E9onIWyJS4KwvFJFXnDJ/LSI2wesc9kTNQdp6BvjqVWWRDsWYOWPSBCAi8cDDwDXASuBmEVk5ZrfvAk+o6mrgXuBbftueAL6jqmcD64ATzvpvAw+qaglwEvjsTN6IiV09A8P8eJubDWW5VBRkRzocY+aMQO4A1gENqtqoqoPAk8B1Y/ZZCbzoLG/1bXcSRYKqbgZQ1R5V7RNvBe/lwNPOMT8Hrp/JGzGx62d/OcDJviHu3GRX/8aEUyAJYClw2O91s7PO327gRmf5BiBdRFxAGdAhIr8VkZ0i8h3njsIFdKjq8BnKBEBEbhWRWhGpbW1tDexdmZjR2TfEIy83cuXZeZy3PCvS4RgzpwSrEfguYIOI7AQ2AC3ACJAAXOpsvxAoAj41lYJV9RFVrVDVitxc6xo42/z0L4109w/b1b8xERBIAmgB/KdiWuasO01Vj6jqjaq6Fvi6s64D75X9Lqf6aBj4PXA+4AGyRCRhojLN7NfeO8hjfznAB1ctZuWSjEiHY8ycE0gC2AGUOr12koCbgGf8dxCRHBHxlXUP8JjfsVki4rt0vxx4S1UVb1vB3zrrbwH+MP23YWLRj7e5OTU0wh2bSiMdijFzUsJkO6jqsIjcBjwHxAOPqepeEbkXqFXVZ4CNwLdERIE/A192jh0RkbuALU7D72vAT5yivwY8KSLfBHYCjwb3rUWfJ2qaKF2YTmWxK9KhzEjf4DD/+5m36OofmlE5W+tOcN2apZQsTA9SZMaYqZg0AQCo6rPAs2PWfcNv+Wne6dEz9tjNwOpx1jfi7WE0J/QNDnPvf7/FxvLcmE8AP/trE7+uPUzpwjRm8sBueV661f0bE0EBJQAzczuaTjI8qtQf74l0KDPS1T/EI39u5PKzFvLYpy6MdDjGmBmwoSDCpNrdBsCh9j76Bocn2Tt6PfryATpPWZ99Y2YDSwBhUuP2kOBMbrI/Ru8COvq8vXauPmcR5y7NjHQ4xpgZsgQQBp2nhnizpZMPrvZOb1h3vDvCEU3PI39upGdwmDvs6t+YWcESQBi8eqCdUYWPXbic5IQ46o/FXgJo6xngZ39t4m9WL6F8kfXaMWY2sAQQBtXuNpIT4rggfwElC9OoPxF7VUA/esnNwPAIt19pffaNmS0sAYRBjdvDhQXZJCfEU56XHnN3AMe7+vmP7Qe58fxlFOemRTocY0yQWAIIMU/PAG8f6z7d979sUTrHuvrp7JvZQ1Th9PDWBkZGlduvsKt/Y2YTSwAhtr2xHeB0AijP89af15+IjbuA5pN9/OrVQ3ykYjnLs1MjHY4xJogsAYRYTWMbackJrHa6TZY5Dah1MVIN9IMXGxCEf7y8JNKhGGOCzBJAiFW7PawrzCYh3vtRL8lMIS05gf0x0BW0qa2X37zWzMcvWsGSrHmRDscYE2SWAELoeFc/ja29VPmN/SMilOalxcSzAP++ZT+J8cKXNhZHOhRjTAhYAgihGrcHgPVF7x78rTwvnbpj3XhHxY5ODSd6+P2uFj5ZWcDCjJRIh2OMCQFLACFU7W4jc14iKxe/e7KTsrx0TvYN0dYzGKHIJve9F+pJSYzn8+8rinQoxpgQsQQQQtVuD5VFLuLi3j1msu9J2mhtB9h3tIs/7jnKZy4uxJWWHOlwjDEhYgkgRA6399F88tS4Y/+X5nkfporWdoAHN9eTnpLAP1xqV//GzGaWAELEV/9fNU4CyE1LZkFqIvVRmAD2NHfw/FvH+dwlRWSmJkY6HGNMCFkCCJFqdxs5acmULHzv0AkiQpnTEBxtHthcT1ZqIp+5pCDSoRhjQswSQAioqrf+v9iFTDBnYvmidPYf74mqnkCvHWznpbpWPv++YtJT7OrfmNkuoAQgIleLSJ2INIjI3eNszxeRLSKyR0ReEpFlfttGRGSX8/OM3/rHReSA37Y1QXlHUaCxrZcT3QPjVv/4lOWl0z0wzNHO/jBGdmb3P19PTloSt1TlRzoUY0wYTJoARCQeeBi4BlgJ3CwiK8fs9l3gCVVdDdwLfMtv2ylVXeP8XDvmuH/227Zr2u8iylSfof7fp8wZEyhaGoKr3W1Uuz18cWMJqUk2VbQxc0EgdwDrgAZVbVTVQeBJ4Lox+6wEXnSWt46zfU6pcbexJDOFFWcYPK3M6QkUDUNDqyoPPF9PXkYyn7hoRaTDMcaESSAJYClw2O91s7PO327gRmf5BiBdRHyXvykiUisi20Xk+jHH3edUGz0oIuN2OBeRW53ja1tbWwMIN7JGR5Xtje1UFudMWP8PkJWaRF5GclTcAfx5fxu1B09y2+WlpCTGRzocY0yYBKsR+C5gg4jsBDYALcCIsy1fVSuAjwPfExHfwDL3AGcBFwLZwNfGK1hVH1HVClWtyM3NDVK4oVN3vJv23sEzVv/4lOWlR7wrqPfqv46lWfP4WMXyiMZijAmvQBJAC+D/zbDMWXeaqh5R1RtVdS3wdWddh/O7xfndCLwErHVeH1WvAeBneKuaYp6v/n+8B8DGKs9Lp+FEDyOjkesJ9MK+E+xu7uSfrighKcE6hRkzlwTyP34HUCoihSKSBNwEPOO/g4jkiIivrHuAx5z1C3xVOyKSA1wMvOW8Xuz8FuB64M0Zv5soUONuo8CVGtDwyWV56fQPjXK4vS8Mkb3X6KjywOZ6Clyp3Hj+sskPMMbMKpMmAFUdBm4DngP2AU+p6l4RuVdEfL16NgJ1IlIP5AH3OevPBmpFZDfexuF/U9W3nG2/FJE3gDeAHOCbQXpPETM8MsorTv1/IE5PDhOhaqA/vXmMfUe7uP3KUhLj7erfmLkmoP5+qvos8OyYdd/wW34aeHqc46qBVROUefmUIo0Be4900T0wHFD9P0Dpwnd6Ar3/nEWhDO09RkaVB1+op2RhGteeN7ZN3xgzF9hlXxBVTzD+/0TmJyewPHteRO4A/nv3ERpO9HDHlWXEx03cW8kYM3tZAgiimkYPZXlp5KYHPoRyeZ53SIhwGh4Z5Xsv1HPWonSuOTe8dx7GmOhhCSBIBodH2XGgnaoA6/99SvPScbf2MDg8GqLI3uu3r7fQ5Onjq1eVv2euAmPM3DEnEsADz9fxjT+EtpPR7uYOTg2NBFz941Oel87wqNLk6Q1RZO82PDLKQ1v2c96yTK48e2FYzmmMiU5zIgH0DIzwy1cOcaAtdF+yNW4PIrC+KHtKx50eEyhMQ0LsaemkpeMUn7206IxPKhtjZr85kQC+uLGYpPg4HnqhPmTnqHa3cc6SDLJSk6Z0XFHufOLjJGxPBPsmqrk4wJ5KxpjZa04kgNz0ZG6pKuAPu4+E5Iu2f2iE1w92UDnF6h+AlMR48l2pYU0AZy1Kt7l+jTFzIwEAfP59RcxPSuB7IbgLeP3gSQZHRqfcAOxTnpdOfRh6Ag0Mj7CjqT2gYSqMMbPfnEkAC+Yn8ZlLCnn2jWPsPdIZ1LKr3R7i44QLC6dW/+9TlpdOk6eX/qGRyXeegZ2HOhgYnn6iMsbMLnMmAQB89pJCMlISeHBzcO8Cqt1tnLcsk7Tk6U2kUr4oHVVoOBHau4Aat4c4gXXTTFTGmNllTiWAzHmJfH5DMS/sO8Guwx1BKbNnYJjdzZ0zqlYJV0+gGreHc5dmkjnP5vs1xsyxBADwqaoCsucncf/zdUEpb0dTOyOjOqNqlQJXKknxcdSfCF0C6BscZufhk1b/b4w5bc4lgPnJCXxhQxEv72/j1QPtMy6vxu0hKT6OC/IXTLuMhPg4inLnh3R6yNqmkwyNzCxRGWNmlzmXAAD+fn0BuenJ3P98Haozm4yl2t3G2hVZM55KsXxRaHsC1TR6SIgTKmaQqIwxs8ucTADzkuL58sZiXjnQfnoEz+no7Bti75GuoFxVl+Wl09Jxiu7+oRmXNZ5qt4c1y7OYP82GamPM7DMnEwDAzRetYElmyozuArYf8KAKVSUzr1cvdxqCQ3EX0NU/xBvNHQHPU2CMmRvmbAJITojntstLef1QBy/VtU6rjBq3h3mJ8Zy3LGvG8fh6Au0PwRPBOw60M6qw3hKAMcbPnE0AAB+pWMby7Hncv3l6dwE1bg8VBQuCMpn6sgXzmJcYH5LJYardHpIS4jh/hdX/G2PeMacTQGJ8HLdfUcabLV08t/f4lI5t7R6g7nh30HrVxMUJZXlpIRkTqNrtoSJ/wYwbqo0xs0tACUBErhaROhFpEJG7x9meLyJbRGSPiLwkIsv8to2IyC7n5xm/9YUi8opT5q9FZGrDaAbJ9WuWUJQznwc31zM6GvhdwPZGb+NxMPvVl+WlU3csuG0AJ3sH2Xe0y+r/jTHvMWkCEJF44GHgGmAlcLOIrByz23eBJ1R1NXAv8C2/badUdY3zc63f+m8DD6pqCXAS+OwM3se0JcTHcfuVpdQd7+Z/3jga8HHVbg/pyQmcuyQjaLGUL0qnrWeA9t7BoJUZikRljJkdArkDWAc0qGqjqg4CTwLXjdlnJfCis7x1nO3vIt6ZSC4HnnZW/Ry4PsCYg+5vVi+hPC+dB1+oZ3gksKkZtzd6uKgom4T44NWilZ7uCRS8aqBqt4fUpHhWB6Gh2hgzuwTy7bUUOOz3utlZ5283cKOzfAOQLiK+S84UEakVke0icr2zzgV0qOrwGcoEQERudY6vbW2dXm+dycTFCXdsKqWxtZc/7Doy6f5HOk5xoK2XyiA/VVseggRQ0+hhXWE2iUFMVMaY2SFY3wp3ARtEZCewAWgBfGMb56tqBfBx4HsiUjyVglX1EVWtUNWK3NzcIIX7Xu8/ZxHnLMngoS37GZrkLsA3q9Z0JoA5k7yMZDJSEoI2KNyJrn4aTvQEPU5jzOwQSAJoAZb7vV7mrDtNVY+o6o2quhb4urOuw/nd4vxuBF4C1gIeIEtEEiYqM9xEhK9eVcah9j6efq35jPvWNHpYkJrIWYvSgx6Dd0iI4CSAGqf+38b/McaMJ5AEsAModXrtJAE3Ac/47yAiOSLiK+se4DFn/QIRSfbtA1wMvKXeTvdbgb91jrkF+MNM38xMXVa+kDXLs/j+lv0MDI8/OYuqUuP2UFnsIi4u+JOqe3sCdc94jCKA6gYPGSkJrAxiQ7UxZvaYNAE49fS3Ac8B+4CnVHWviNwrIr5ePRuBOhGpB/KA+5z1ZwO1IrIb7xf+v6nqW862rwF3ikgD3jaBR4P0nqZNRLjrqnKOdPbz5KuHx93nUHsfLR2nQlatUpaXTlf/MCe6B2ZcVk2jh4uKXMSHIFEZY2JfQCODqeqzwLNj1n3Db/lp3unR479PNbBqgjIb8fYwiioXl7hYV5jND7Y28NGK5cxLevfDU6fr/0NUreI/OUxeRsq0yznc3seh9j4+fXFBkCIzxsw21jVkDBHhq5vKaO0e4BfbD75ne7Xbw8L0ZIpz54fk/GV5acDMewJZ/b8xZjKWAMZxUZGLS0tz+OE2N70Dw6fXqyrVTv2/91GG4HOlJZOTljzjnkDb3R5c85NOJxRjjBnLEsAE7txURnvvII9XN51e527toa1nIOTDKpQvSqN+BhPE+xLV+hAmKmNM7LMEMIG1KxZwxVkLeeTPjXQ5k7T4Jo8JdbVK6cJ09h/vntLYRP4OtPVyrKvfxv8xxpyRJYAzuGNTGZ2nhnj05QOAt1vl0qx5LM9ODel5yxel0zc4QkvHqWkdb/X/xphAWAI4g3OXZnL1OYt49C8HaO8dZPsBT1iuqv17Ak1HtdvDoowUClyhTVTGmNhmCWASd2wqo3dwmDuf2kVH31BQpn+cjK/hdjqTw6gq293eRGX1/8aYM7EEMInyRen8zeolp6eNrCwKfbVKekoiS7PmTWt6yPrjPXh6B234Z2PMpCwBBOD2K0uJEyjKmc+izOk/nDUVpXlp1E1jgvhqdxtg4/8bYyYX0JPAc11xbhr/8qGVZM8P36Rl5XnpVDd4GB4ZndKcA9VuDyuyU1m2wOr/jTFnZgkgQJ++uDCs5yvLS2dwZJQmTx8lCwN7mGtkVNne6OGDqxaHODpjzGxgVUBRqnzR1CeHeetIF939w1b9Y4wJiCWAKFWyMA2RqSWA0/X/NgGMMSYAlgCiVEpiPPnZqVNMAB5KFqaxcAajiBpj5g5LAFHMNzlMIIZGRtnR1G7DPxhjAmYJIIqVL0qnydNH/9D4s5P529PcQd/giFX/GGMCZgkgipXlpTMyqjS29k66b3WDd/yf9ZYAjDEBsgQQxXw9gfafmLwaqKbRw8rFGSwI47MKxpjYZgkgihW45pMQJ5O2A/QPjVB78KTV/xtjpiSgBCAiV4tInYg0iMjd42zPF5EtIrJHRF4SkWVjtmeISLOI/MBv3UtOmbucn4UzfzuzS1JCHEW58yftCfT6oZMMDo9a/39jzJRMmgBEJB54GLgGWAncLCIrx+z2XeAJVV0N3At8a8z2/wP8eZziP6Gqa5yfE1OOfg4oy0ufdFTQ7W4P8XHCusLsMEVljJkNArkDWAc0qGqjqg4CTwLXjdlnJfCis7zVf7uIXADkAc/PPNy5pzwvncPtp941N/FY1W4Pq5Zmkp6SGMbIjDGxLpAEsBQ47Pe62Vnnbzdwo7N8A5AuIi4RiQPuB+6aoOyfOdU//yITDF4vIreKSK2I1La2tgYQ7uxS5jQEN0wwR3DvwDC7DndY9Y8xZsqC1Qh8F7BBRHYCG4AWYAT4EvCsqjaPc8wnVHUVcKnz8/fjFayqj6hqhapW5ObmBinc2HF6drAJqoF2NLUzPKrWAGyMmbJARgNtAZb7vV7mrDtNVY/g3AGISBrwYVXtEJFK4FIR+RKQBiSJSI+q3q2qLc6x3SLyn3irmp6Y8TuaZVZkp5KcEEf9BD2Baho9JMYLFflW/2+MmZpAEsAOoFRECvF+8d8EfNx/BxHJAdpVdRS4B3gMQFU/4bfPp4AKVb1bRBKALFVtE5FE4EPAC0F4P7NOfJw4k8NMkADcHtauWMC8pPgwR2aMiXWTVgGp6jBwG/AcsA94SlX3isi9InKts9tGoE5E6vE2+N43SbHJwHMisgfYhTex/GRa72AOKMtLH7craOepId5s6bThH4wx0xLQhDCq+izw7Jh13/Bbfhp4epIyHgced5Z7gQumFurcVZaXzm9fb6Gzb4jM1Hd6+rx6oJ1Rxer/jTHTYk8Cx4BypyG4fsyQENXuNlIS41izIisCURljYp0lgBjg6wo6dkiIGreHivxskhOs/t8YM3WWAGLAkswU0pIT3tUO4OkZ4O1j3db/3xgzbZYAYoCIUJaX9q47gO2N7YDV/xtjps8SQIzw9QRSVcBb/5+WnMCqpZkRjswYE6ssAcSIsrx0TvYN0dYzCHgfAFtXmE1CvP0TGmOmx749YoRvcpj6490c6+ynsbXXqn+MMTMS0HMAJvJOjwl0rJsT3f0A1gBsjJkRSwAxIictiez5SdQf72ZkVMlKTeTsRRmRDssYE8MsAcQIEaF0YRr1x7s50T3A+kIXcXHjjqBtjDEBsTaAGFK+KJ09zZ00nzxFVYlV/xhjZsYSQAwpy0tneNTbDdQGgDPGzJQlgBji6wmUk5ZMycK0CEdjjIl1lgBiSNlCbwKoKnYxwQyaxhgTMGsEjiGZqYl87eqzuLQ0J9KhGGNmAUsAMeaLG4sjHYIxZpawKiBjjJmjLAEYY8wcZQnAGGPmqIASgIhcLSJ1ItIgInePsz1fRLaIyB4ReUlElo3ZniEizSLyA791F4jIG06Z/y7WrcUYY8Jq0gQgIvHAw8A1wErgZhFZOWa37wJPqOpq4F7gW2O2/x/gz2PW/RD4B6DU+bl6ytEbY4yZtkDuANYBDaraqKqDwJPAdWP2WQm86Cxv9d8uIhcAecDzfusWAxmqul29M5w8AVw/3TdhjDFm6gJJAEuBw36vm511/nYDNzrLNwDpIuISkTjgfuCuccpsnqRMAETkVhGpFZHa1tbWAMI1xhgTiGA1At8FbBCRncAGoAUYAb4EPKuqzWc6+ExU9RFVrVDVitzc3OBEa4wxJqAHwVqA5X6vlznrTlPVIzh3ACKSBnxYVTtEpBK4VES+BKQBSSLSAzzklDNhmeN57bXX2kTkYAAxR0oO0BbpIAIUK7FanMEVK3FC7MQaC3Hmj7cykASwAygVkUK8X9I3AR/330FEcoB2VR0F7gEeA1DVT/jt8ymgQlXvdl53ich64BXgk8D3JwtEVaP6FkBEalW1ItJxBCJWYrU4gytW4oTYiTVW4hzPpFVAqjoM3AY8B+wDnlLVvSJyr4hc6+y2EagTkXq8Db73BXDuLwE/BRoAN/CnqYdvjDFmugIaC0hVnwWeHbPuG37LTwNPT1LG48Djfq9rgXMDD9UYY0ww2ZPAwfVIpAOYgliJ1eIMrliJE2In1liJ8z3E2w3fGGPMXGN3AMYYM0dZAjDGmDnKEsAUichyEdkqIm+JyF4RuX2cfTaKSKeI7HJ+vjFeWeEgIk3OoHu7RKR2nO3iDMbX4Azmd34EYiz3+6x2OV2EvzJmn4h8piLymIicEJE3/dZli8hmEdnv/F4wwbG3OPvsF5FbIhDnd0Tkbeff9XcikjXBsWf8GwlTrP8qIi1+/74fmODYMw5MGYY4f+0XY5OI7Jrg2LB+ptOmqvYzhR9gMXC+s5wO1AMrx+yzEfhjpGN1YmkCcs6w/QN4u+AKsB54JcLxxgPHgPxo+EyB9wHnA2/6rft/gbud5buBb49zXDbQ6Pxe4CwvCHOcVwEJzvK3x4szkL+RMMX6r8BdAfxtuIEiIAnvEDQrwxnnmO33A9+Ihs90uj92BzBFqnpUVV93lrvxPhsx7jhGMeI6vCO5qqpuB7Kcwfoi5QrArapR8cS3qv4ZaB+z+jrg587yzxl/IMP3A5tVtV1VTwKbCeGIt+PFqarPq/c5HoDtvPvp+4iZ4DMNRCADUwbNmeJ0hq//KPCrUJ0/HCwBzICIFABr8T7NPFaliOwWkT+JyDnhjexdFHheRF4TkVvH2R7IYH/hdBMT/6eKls80T1WPOsvH8D78OFa0fa6fYeKHLSf7GwmX25zqqscmqFaLps/0UuC4qu6fYHu0fKZnZAlgmpwxj/4L+Iqqdo3Z/DreKozz8A5x8fswh+fvElU9H+98Dl8WkfdFMJYzEpEk4FrgN+NsjqbP9DT13u9HdV9qEfk6MAz8coJdouFv5IdAMbAGOIq3eiWa3cyZr/6j4TOdlCWAaRCRRLxf/r9U1d+O3a6qXara4yw/CyQ64yWFnaq2OL9PAL/Dexvtb9LB/sLoGuB1VT0+dkM0fabAcV81mfP7xDj7RMXn6ozB9SHgE06yeo8A/kZCTlWPq+qIescT+8kEMUTLZ5qAd/DLX0+0TzR8poGwBDBFTt3fo8A+VX1ggn0WOfshIuvwfs6e8EV5Oo75IpLuW8bbKPjmmN2eAT7p9AZaD3T6VW+E24RXVdHymTqeAXy9em4B/jDOPs8BV4nIAqc64ypnXdiIyNXA/wNcq6p9E+wTyN9IyI1pd7phghhOD0zp3C3ehPffItyuBN7WCYa5j5bPNCCRboWOtR/gEry3/HuAXc7PB4AvAF9w9rkN2Iu3l8J2oCpCsRY5Mex24vm6s94/VsE75acbeAPviK2RiHU+3i/0TL91Ef9M8Sako8AQ3jrnzwIuYAuwH3gByHb2rQB+6nfsZ/AOdtgAfDoCcTbgrTP3/Z3+yNl3Cd55Oib8G4lArP/h/P3twfulvnhsrM7rD+DteecOdazjxemsf9z3d+m3b0Q/0+n+2FAQxhgzR1kVkDHGzFGWAIwxZo6yBGCMMXOUJQBjjJmjLAEYY8wcZQnAGGPmKEsAxhgzR/3/LZE5HuJj9xMAAAAASUVORK5CYII=\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 训练和导出结果一步达成\n",
    "from sklearn.preprocessing import MinMaxScaler as mms\n",
    "data = load_breast_cancer()\n",
    "x = data.data\n",
    "y = data.target\n",
    "MMS = mms()\n",
    "MMS.fit(x)\n",
    "x_new=MMS.transform(x)\n",
    "\n",
    "score = []\n",
    "krange = range(1,20)\n",
    "\n",
    "x_train,x_test,y_train,y_test = train_test_split(x_new,y,test_size=0.3)\n",
    "\n",
    "for i in krange: \n",
    "    clf=KNeighborsClassifier(n_neighbors=i)\n",
    "    clf.fit(x_train,y_train)\n",
    "    clf.score(x_train,y_train)\n",
    "    score.append(clf.score(x_test,y_test))\n",
    "\n",
    "plt.plot(krange,score);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 也可以直接通过numpy来实现\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "0.9724367088607595\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler as mms\n",
    "data = load_breast_cancer()\n",
    "x = data.data\n",
    "y = data.target\n",
    "x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1)\n",
    "\n",
    "#对训练集归一化\n",
    "MMS = mms().fit(x_train)\n",
    "\n",
    "#将训练集归一化\n",
    "x_train_ = MMS.transform(x_train)\n",
    "\n",
    "#利用训练集学习的结果对测试集归一化\n",
    "x_test_ = MMS.transform(x_test)\n",
    "\n",
    "\n",
    "\n",
    "score = []\n",
    "var_ = []\n",
    "krange = range(1,20)\n",
    "\n",
    "# 严谨地使用了验证集，仅对归一化之后的训练集进行交叉验证\n",
    "for i in krange:\n",
    "    clf = KNeighborsClassifier(n_neighbors=i)\n",
    "    cvresult = CVS(clf,x_train_,y_train,cv=5)\n",
    "    score.append(cvresult.mean())\n",
    "    var_.append(cvresult.var())\n",
    "plt.plot(krange,score,color = 'k')\n",
    "plt.plot(krange,np.array(score)+np.array(var_)*2,c='red',linestyle='--')\n",
    "plt.plot(krange,np.array(score)-np.array(var_)*2,c='red',linestyle='--')\n",
    "bestindex = krange[score.index(max(score))]-1\n",
    "print(bestindex)\n",
    "print(score[bestindex])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "0.9707602339181286"
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 测试模型结果\n",
    "clf = KNeighborsClassifier(n_neighbors=8).fit(x_train_,y_train)\n",
    "score = clf.score(x_test_,y_test)\n",
    "score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "0.9699367088607594\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 加上参数weights\n",
    "\n",
    "score = []\n",
    "var_ = []\n",
    "krange = range(1,20)\n",
    "\n",
    "for i in krange:\n",
    "    clf = KNeighborsClassifier(n_neighbors=i,weights='distance')\n",
    "    cvresult = CVS(clf,x_train_,y_train,cv=5)\n",
    "    score.append(cvresult.mean())\n",
    "    var_.append(cvresult.var())\n",
    "\n",
    "plt.plot(krange,score,color='k')\n",
    "plt.plot(krange,np.array(score)+np.array(var_)*2,c='red',linestyle='--')\n",
    "plt.plot(krange,np.array(score)-np.array(var_)*2,c='red',linestyle='--')\n",
    "bestindex = krange[score.index(max(score))]-1\n",
    "print(bestindex)\n",
    "print(score[bestindex])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "outputs": [],
   "source": [
    "?KNeighborsClassifier"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "0.9649122807017544"
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 测试模型效果\n",
    "clf = KNeighborsClassifier(n_neighbors=8,weights='distance').fit(x_train_,y_train)\n",
    "score =clf.score(x_test_,y_test)\n",
    "score\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}